#ifndef FILEFORMAT_H
#define FILEFORMAT_H
#include "config.h"

#include "Filesystem.h"
#include "AbstractDatabase.h"

/**
* Abstrakte Klasse für das implementieren verschieden Dateiformate. Der Einzige Parameter der jede Methode benötigt ist das FSInfo object, das alle nötigen Informationen besitzt, die für die jeweilige Methode benötigt wird.
*/
class AbstractFileFormat {
public:
    /**
    * Konstruktor der AbstractFileFormat Klasse
    **/
    AbstractFileFormat(PFSInfo info);

    /**
    * Destruktor der AbstractFileFormat Klasse.
    **/
    virtual ~AbstractFileFormat();
    /**
    * Die read-Methode wird aufgerufen, wenn eine Datei gelesen wird.
    **/
    virtual int read(PFSInfo info)  = 0;
    /**
    * Die write-Methode wird aufgerufen, wenn eine Datei geschrieben werden soll.
    **/
    virtual int write(PFSInfo info) = 0;
    /**
    * Wenn das Programm die close()-Methode der Betriebssystem API aufruft, wird diese Methode ausgeführt.
    **/
    virtual int close(PFSInfo info) = 0;
    /**
    * Setz den Dateiinhalt und die Dateigröße auf 0.
    **/
	int truncate(PFSInfo info);
protected:
    bool created;
    bool writeMode;
    bool readMode;
    bool readWriteMode;
	bool truncateMode;
    bool appendMode;
	bool isMainThread;

    double sizeParam;
};
#endif
